package com.service.tcp;

import com.domain.Contents;
import com.domain.Equip_data;
import com.domain.Tcp_public_data;
import com.service.Public_funtion;
import com.service.check_data.Check_equip_Server_data;
import com.service.tcp.Tcp_doing.KDG_to_Tcp_doing;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static com.MysqlApplication.equip_list;
import static com.MysqlApplication.global_data;

@Service
public class ServerChannel_service
{
    @Autowired
    private Check_equip_Server_data check_data;
    @Autowired
    private Public_funtion p;
    @Autowired
    private Tcp_public_funtion tcp_p;
    @Autowired
    KDG_to_Tcp_doing KDGtoTcp_doing;


    /**
     * 检查发过来的数据基本格式有没有错误，是不是乱链接发来的
     */
    public byte[] check_tcpdata(Object msg)
    {
        byte[] bytes;
        try {
            ByteBuf buf = (ByteBuf)msg;
            bytes = new byte[buf.readableBytes()];
            buf.readBytes(bytes);
        }finally {
//            ReferenceCountUtil.release(msg);
        }
        if (bytes==null)  return null;
        System.arraycopy(bytes,0,global_data.Byte_data,0,bytes.length);
        do {
            if(!check_data.check_head()){break;}
            byte[] data=check_data.check_tail();
            if(data==(null)){break;}
            if(!check_data.check_checkData(data)){break;}

            p.print_log(" tcp 服务器收到信息:" + Arrays.toString(data), 5);
            return data;
        }
        while (false);


        p.print_log(" tcp收到错误格式数据，" ,5);
        return null;
    }


    /**
     * tcp第一次连接，发送欢迎内容
     */
    public void send_welcome_data (ChannelHandlerContext ctx)
    {
        Tcp_public_data turn_data=tcp_p.equip_data_init();
        turn_data.setKind(1);
        turn_data.content=new String ("welcome").getBytes();
        ByteBuf encoded=tcp_p.tcp_to_bytebuf(ctx,turn_data);
        ctx.channel().writeAndFlush(encoded);
    }

    /**
     * 通过iP查询设备是否是第一次连接
     */
    public  boolean check_first_connect(ChannelHandlerContext ctx)
    {
        String newip=tcp_p.getIPAddrString(ctx);
        if(tcp_p.ip_check_listequip(newip)>-1){

            p.print_log("该设备为旧设备。",4);
            return false;
        }
        p.print_log("该设备为新设备。",8);
        return true;
    }



    /**
     * 输入发来信息的ip,从数据库查找，输出可以发送到tcp设备的编号
     */

    public int search_object_equiplist( ChannelHandlerContext ctx){
        String ctx_ip=  tcp_p.getIPAddrString(ctx);
        Equip_data equip=new Equip_data();
        int i=0;
        for (i=0; i<equip_list.size();i++){
            equip = equip_list.get(i);
            if (equip.getIP().equals(ctx_ip)){
                return i;
            }
        }
        return -1;
    }

    public void remove_object_equiplist(int i){
        p.print_log("删除设备"+equip_list.get(i).getEquip_name(),5);
        equip_list.remove(i);

    }


}



